package com.whpost.service.wx.service;

import com.whpost.service.tools.ToolBean;
import jakarta.annotation.Resource;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutNewsMessage;
import org.springframework.stereotype.Service;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

@Service
public class WechatMessageService {

    @Resource
    private WxMpService wxMpService;

    private String redirectUrl = "https://www.baidu.com";

    /**
     * 处理微信事件
     */
    public WxMpXmlOutMessage handleEvent(WxMpXmlMessage inMessage) {
        try {
            ToolBean.info("微信服务获取到事件：" + inMessage.toString());
            String event = inMessage.getEvent();
            String sceneId = null;

            // 获取场景值
            if ("subscribe".equals(event)) {
                String eventKey = inMessage.getEventKey();
                if (eventKey != null && eventKey.startsWith("qrscene_")) {
                    sceneId = eventKey.substring(8);
                    ToolBean.info("关注事件的场景值：" + sceneId);
                }
            } else if ("SCAN".equals(event)) {
                sceneId = inMessage.getEventKey();
                ToolBean.info("扫码事件的场景值：" + sceneId);
            }

            // 根据场景值处理回复
            if (sceneId != null) {
                return handleSceneReply(inMessage, sceneId);
            }

            // 无场景值时返回空
            return null;

        } catch (Exception e) {
            ToolBean.info("微信服务获处理事件发生错误！"+e.toString());
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 根据场景值处理不同回复
     * @param inMessage 输入消息
     * @param sceneId 场景值
     * @return 回复消息
     */
    private WxMpXmlOutMessage handleSceneReply(WxMpXmlMessage inMessage, String sceneId) {
        try {
            switch (sceneId) {
                default:
                    // 默认场景：发送提示消息
                    return createNewsMessage(inMessage);
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }


    /**
     * 创建图文消息
     */
    private WxMpXmlOutMessage createNewsMessage(WxMpXmlMessage inMessage) throws UnsupportedEncodingException {

        String TARGET_PAGE_URL = "https://dkx.whsyzj.com/wx/pages/baoming/index";

        // 1. 拼接静默授权链接的核心参数
        String appId = wxMpService.getWxMpConfigStorage().getAppId(); // 从配置中获取公众号APPID（避免硬编码）
        String redirectUri = URLEncoder.encode(TARGET_PAGE_URL, "UTF-8"); // 目标页面URL必须URL编码
        String scope = "snsapi_base"; // 静默授权标识（仅获取openid，无感知）
        String state = "hdbm"; // 自定义状态值（可选，用于后续校验，比如区分页面来源）

        // 2. 构造完整的静默授权链接
        String silentAuthUrl = String.format(
                "https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=%s&state=%s#wechat_redirect",
                appId, redirectUri, scope, state
        );

        // 3. 构建图文消息（链接替换为静默授权链接）
        WxMpXmlOutNewsMessage.Item item = new WxMpXmlOutNewsMessage.Item();
        item.setTitle("【银龄春晚·邮政邀您闪耀舞台】🎤✨");
        item.setDescription("湖北知音艺术团选拔赛开始报名啦！>> 点击报名");
        item.setPicUrl("https://mmecoa.qpic.cn/mmecoa_jpg/uZuhibC4W5X2VNia0QPfqLKQYtoUUfckFNRqgfTg0OaXkkp1gwazkn8LibibDb1mU38LOKEOUs7tnvQ5Z8ZblbEExg/640?wx_fmt=jpeg&amp;from=appmsg"); // 封面图URL（需符合微信规范：JPG/PNG，尺寸建议640*320）
        item.setUrl(silentAuthUrl); // 关键：设置为静默授权链接

        // 4. 组装图文消息并返回
        WxMpXmlOutNewsMessage newsMessage = WxMpXmlOutMessage.NEWS()
                .fromUser(inMessage.getToUser()) // 公众号ID（消息来源）
                .toUser(inMessage.getFromUser()) // 用户OpenID（消息接收者）
                .addArticle(item) // 添加图文项
                .build();

        return newsMessage;
    }

    public String getOauthUrl(String url) throws UnsupportedEncodingException {

        // 1. 拼接静默授权链接的核心参数
        String appId = wxMpService.getWxMpConfigStorage().getAppId(); // 从配置中获取公众号APPID（避免硬编码）
        String redirectUri = URLEncoder.encode(url, "UTF-8"); // 目标页面URL必须URL编码
        String scope = "snsapi_base"; // 静默授权标识（仅获取openid，无感知）
        String state = "hdbm"; // 自定义状态值（可选，用于后续校验，比如区分页面来源）

        // 2. 构造完整的静默授权链接
        String silentAuthUrl = String.format(
                "https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=%s&state=%s#wechat_redirect",
                appId, redirectUri, scope, state
        );

        return silentAuthUrl;
    }
}
